/*
   Copyright 2011 
   
   DIFED

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
 */

package com.difed.cccam.db;

import java.util.List;

import com.difed.cccam.db.entidades.DatosCliente;
import com.difed.cccam.db.entidades.DatosConexion;
import com.difed.cccam.db.entidades.DatosPersonales;
import com.difed.cccam.db.entidades.DatosServidor;
import com.difed.cccam.db.entidades.Widget;
import com.difed.cccam.entidades.Cliente;
import com.difed.cccam.entidades.Servidor;

public interface ProveedorBD {
    
    public static final int TIPO_CACHE_CLIENTES = 1;
    public static final int TIPO_CACHE_SERVIDORES = 2;
    
    public List<DatosConexion> getConexiones();
    public DatosConexion getConexion(long idConexion);
    public void guardaConexion(DatosConexion conexion);
    public int eliminaConexion(long idConexion);
    
    public DatosCliente getCliente(long idConexion, long id);
    public List<DatosCliente> getClientes(long idConexion);
    public List<DatosCliente> getClientes(long idConexion, String filtro);
    public List<DatosCliente> getRestoClientes(long idConexion, List<Cliente> clientesConectados);
    public List<DatosCliente> getRestoClientesDatos(long idConexion, List<DatosPersonales> datos);
    public void actualizaClientes(long idConexion, List<Cliente> clientes);
    public int eliminaCliente(long idConexion, long id);
    public ObjetoCache getClientesCache(long idConexion);
    public void actualizaClientesCache(long idConexion, List<Cliente> clientes);
    
    public DatosServidor getServidor(long idConexion, long id);
    public List<DatosServidor> getServidores(long idConexion);
    public List<DatosServidor> getServidores(long idConexion, String filtro);
//    public List<DatosServidor> getRestoServidores(long idConexion, List<Servidor> servidoresConectados);
    public List<DatosServidor> getRestoServidoresDatos(long idConexion, List<DatosPersonales> datos);
    public List<DatosServidor> getServidoresNoAsociadosDatos(long idConexion);
    public void actualizaServidores(long idConexion, List<Servidor> servidores);
    public int eliminaServidor(long idConexion, long id);
    public ObjetoCache getServidoresCache(long idConexion);
    public void actualizaServidoresCache(long idConexion, List<Servidor> servidores);
    
    public DatosPersonales getDatos(long idConexion, long id);
    public List<DatosPersonales> getDatos(long idConexion);
    public void guardaDatos(long idConexion, List<DatosPersonales> datos);
    public void guardaDato(long idConexion, DatosPersonales dato);
    public int eliminaDato(long idConexion, long id);
    
    public Widget getWidget(int id);
    public List<Widget> getWidgets();
    public void guardaWidget(Widget widget);
    public void eliminaWidget(int id);

}
